//长度最小的子数组
/*给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。
*/
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int ret = INT_MAX;
        // int count = 0;
        int sum = 0;
        int left = 0, right = 0;
        while (right < nums.size()) {
            sum += nums[right];
            while (sum >= target) {
                ret = min(ret, right - left + 1);
                sum -= nums[left];
                left++;
            }
            right++;
        }

        //  if (sum >= target)
        //    ret = min(ret, count);
        return ret == INT_MAX ? 0 : ret;
    }
};

//无重复字符的最长子串
/*给定一个字符串 s ，请你找出其中不含有重复字符的 最长 子串 的长度。*/
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int ret = 0;
        int hash[128] = {0};
        int left = 0, right = 0;
        // int count=0;
        int n = s.size();
        while (right < n) {
            hash[s[right]]++;
            while (hash[s[right]] > 1) {
                hash[s[left]]--;
                left++;
            }
            ret = max(ret, right - left + 1);
            right++;
        }
        return ret;
    }
};